//
//  EmoticonPackage.swift
//  表情键盘
//
//  Created by 焦林生 on 15/11/15.
//  Copyright © 2015年 焦林生. All rights reserved.
//

import UIKit
//表情包模型
class EmoticonPackage: NSObject {

    
    //表情包路径名
    var id: String?
    
    //分组名
    var group_name_cn: String?
    
    //表情数组  能保证在使用的时候数组已经存在 直接使用
    lazy var emoticons = [Emoticons]()
    
    //MARK: 构造函数
    init(dict: [String: AnyObject]) {
        super.init()
        
        // 不会按照顺序调用字典中的 key，不能保证生成 emoticons 数组的时候 id 已经被设置
        // setValuesForKeysWithDictionary(dict)
        
        //字典转模型
        id = dict["id"] as? String
        group_name_cn = dict["group_name_cn"] as? String
        
        //1 获得字典的数组
        if let array = dict["emoticons"] as? [[String: AnyObject]] {
        
            //2遍历数组
            var index = 0
            for var d in array {
                //1> 判断是否有png的值
                if let png = d["png"] as? String,
                     dir = id {
                        //2>重新设置字典的png
                        d["png"] = dir + "/" + png
                }
            
                emoticons.append(Emoticons(dict: d))
                
                //每隔20个天价一个删除按钮
                index++
                if index == 20 {
                
                   emoticons.append(Emoticons(isRemoved: true))
                    index = 0
                }
            }
        }
        // 2 添加空白按钮
        appendEmptyEmoticon()
    }
    
    //在表情数组末尾 添加空白表情
    private func appendEmptyEmoticon() {
    
        //取表情的余数
        let count  = emoticons.count % 21
        
        //只有最近和默认需要添加空白表情
        if emoticons.count > 0 && count == 0 {
        
            return
        }
        
        //添加空白表情
        for _ in count..<20 {
        
            emoticons.append(Emoticons(isEmpty: true))
        }
        //最末尾添加一个删除按钮
        emoticons.append(Emoticons(isRemoved: true))
    }
    
    
    //描述信息 判断数据的正确与否
    override var description: String {
    
        let keys = ["id", "group_name_cn", "emoticons"]
        
        return dictionaryWithValuesForKeys(keys).description
    }
    
}
